package ar.com.larreta.colegio.client.alumnos;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;

import com.extjs.gxt.ui.client.Style.HorizontalAlignment;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.Window;
import com.extjs.gxt.ui.client.widget.grid.ColumnConfig;
import com.extjs.gxt.ui.client.widget.grid.ColumnModel;
import com.extjs.gxt.ui.client.widget.menu.Menu;
import com.extjs.gxt.ui.client.widget.menu.MenuItem;
import com.google.gwt.i18n.client.DateTimeFormat;

import ar.com.larreta.colegio.intercambio.client.Obligacion;
import ar.com.larreta.colegio.intercambio.client.Pago;
import ar.com.larreta.colegio.intercambio.client.ProcesosColegioConst;
import ar.com.larreta.controlador.client.Invocador;
import ar.com.larreta.grilla.client.Grilla;
import ar.com.larreta.grilla.client.NumberCellRenderer;
import ar.com.larreta.grilla.client.SectorConGrilla;
import ar.com.larreta.intercambio.client.ArchivoGenerado;
import ar.com.larreta.intercambio.client.Respuesta;
import ar.com.larreta.vista.client.DialogInfo;
import ar.com.larreta.vista.client.Mensajes;
import ar.com.larreta.vista.client.RetornoDeLlamadaConVentana;

public class SectorPagos extends SectorConGrilla {

	private static final String LISTA = "listaPagos";
	
	public static final Integer ANCHO = 415;
	public static final Integer LARGO_DATOS = 320;
	public static final Integer LARGO_GRILLA = LARGO_DATOS - 55;
	
	public static final String ARCHIVO_GENERADO = "archivoGenerado";
	
	private MenuItem imprimir;
	
	public SectorPagos() {
		setHeading(Mensajes.getInstancia().get("msg.colegio.pagosefectuados"));
		
		grilla = new Grilla(null, getConfiguracionColumnas(), LISTA);
		add(grilla);
		
		setSize((ANCHO) - 15 , LARGO_DATOS);
		
		grilla.setSize((ANCHO) - 40 , LARGO_GRILLA);
		grilla.setTamanioPagina(11);

		add(grilla.getToolBar());
		
		grilla.setContextMenu(new Menu());
		imprimir = new MenuItem(Mensajes.getInstancia().get("msg.colegio.imprimirrecibo"), new SelectionListener<MenuEvent>() {
			@Override
			public void componentSelected(MenuEvent ce) {
				if ((getGrilla().getSelectionModel().getSelectedItems()!=null) &&
						(getGrilla().getSelectionModel().getSelectedItems().size()>0)){
					
					Iterator<Pago> pagos = grilla.getSelectionModel().getSelectedItems().iterator();
					 
					while (pagos.hasNext()) {
						Pago pago = (Pago) pagos.next();
						pago.setProceso(ProcesosColegioConst.GENERAR_RECIBO);
						Invocador.invocar(pago, new RetornoDeLlamadaConVentana() {
							
							@Override
							public void procesado(Map<Object, Respuesta> respuestas) {
								ArchivoGenerado generado = (ArchivoGenerado) respuestas.get(ARCHIVO_GENERADO);
								
								Window window = new Window();
								window.setSize(600, 340);
								window.setUrl("/colegio/descargarArchivo?generado=" + generado.getClaveUnica());
								window.show();
								
							}
						});
					}
				} else {
					DialogInfo.mostrar("Omitio Seleccion", "Debe seleccionar al menos un pago a imprimir.");
				}				
			}
		});
		grilla.getContextMenu().add(imprimir);
	}
	

	@Override
	public ColumnModel getConfiguracionColumnas() {
		ColumnConfig columnNombre = new ColumnConfig("producto.nombre", Mensajes.getInstancia().get("msg.colegio.pagos.nombre"), 150);
		ColumnConfig columnValor = new ColumnConfig("valor", Mensajes.getInstancia().get("msg.colegio.pagos.valor"), 50);
		columnValor.setAlignment(HorizontalAlignment.RIGHT);
		columnValor.setRenderer(new NumberCellRenderer("0.00"));
		ColumnConfig columnResponsable = new ColumnConfig("responsable.nombreCompleto", Mensajes.getInstancia().get("msg.colegio.pagos.responsable"), 100);
		ColumnConfig columnVencimiento = new ColumnConfig("fechaCreacion", Mensajes.getInstancia().get("msg.colegio.pagos.fecha"), 70);
		columnVencimiento.setDateTimeFormat(DateTimeFormat.getFormat("dd/MM/yyyy"));
		columnVencimiento.setAlignment(HorizontalAlignment.CENTER);
		
		ArrayList<ColumnConfig> columnConfigs = new ArrayList<ColumnConfig>();
		columnConfigs.add(columnNombre);
		columnConfigs.add(columnValor);
		columnConfigs.add(columnResponsable);
		columnConfigs.add(columnVencimiento);
		
		return new ColumnModel(columnConfigs);
	}

	@Override
	public String getNombreLista() {
		return LISTA;
	}


	@Override
	public void botonAgregarSeleccionado() {
	}

}
